{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7d7e50af",
   "metadata": {},
   "source": [
    "### Import dependencies"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "eb649b04",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-03-28T20:35:06.576337Z",
     "iopub.status.busy": "2023-03-28T20:35:06.576337Z",
     "iopub.status.idle": "2023-03-28T20:35:09.448694Z",
     "shell.execute_reply": "2023-03-28T20:35:09.448694Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time: 2.84 s (started: 2023-03-28 22:35:06 +02:00)\n"
     ]
    }
   ],
   "source": [
    "%load_ext autotime\n",
    "\n",
    "from IPython.display import display_html\n",
    "from PIL import Image as PILImage\n",
    "\n",
    "from img2table.document import Image\n",
    "from img2table.ocr import TesseractOCR"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ec5c901",
   "metadata": {},
   "source": [
    "The <code>implicit_rows</code> parameter is used to split existing rows into smaller ones if:\n",
    "1. The row contains multi-line cells\n",
    "2. Vertical separation between elements of the cell is large enough"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21336bb3",
   "metadata": {},
   "source": [
    "### Image used for the example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "023b4276",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-03-28T20:35:09.448694Z",
     "iopub.status.busy": "2023-03-28T20:35:09.448694Z",
     "iopub.status.idle": "2023-03-28T20:35:09.480106Z",
     "shell.execute_reply": "2023-03-28T20:35:09.480106Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<PIL.PngImagePlugin.PngImageFile image mode=RGB size=632x344>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time: 15 ms (started: 2023-03-28 22:35:09 +02:00)\n"
     ]
    }
   ],
   "source": [
    "PILImage.open(\"data/implicit.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b595d562",
   "metadata": {},
   "source": [
    "### Instantiate objects"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a172a717",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-03-28T20:35:09.480106Z",
     "iopub.status.busy": "2023-03-28T20:35:09.480106Z",
     "iopub.status.idle": "2023-03-28T20:35:09.574250Z",
     "shell.execute_reply": "2023-03-28T20:35:09.574250Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time: 78 ms (started: 2023-03-28 22:35:09 +02:00)\n"
     ]
    }
   ],
   "source": [
    "# Define OCR instance, requires prior installation of Tesseract-OCR\n",
    "ocr = TesseractOCR()\n",
    "\n",
    "# Define image\n",
    "img = Image(src=\"data/implicit.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bb700fe0",
   "metadata": {},
   "source": [
    "### Extract tables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "494e62de",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-03-28T20:35:09.574250Z",
     "iopub.status.busy": "2023-03-28T20:35:09.574250Z",
     "iopub.status.idle": "2023-03-28T20:35:10.186717Z",
     "shell.execute_reply": "2023-03-28T20:35:10.186717Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time: 593 ms (started: 2023-03-28 22:35:09 +02:00)\n"
     ]
    }
   ],
   "source": [
    "# Extract tables without implicit rows\n",
    "extracted_tables = img.extract_tables(ocr=ocr, implicit_rows=False)\n",
    "table = extracted_tables.pop()\n",
    "\n",
    "# Extract tables with implicit rows\n",
    "extracted_tables_implicit = img.extract_tables(ocr=ocr, implicit_rows=True)\n",
    "table_implicit_rows = extracted_tables_implicit.pop()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0253eb9d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-03-28T20:35:10.186717Z",
     "iopub.status.busy": "2023-03-28T20:35:10.186717Z",
     "iopub.status.idle": "2023-03-28T20:35:10.217981Z",
     "shell.execute_reply": "2023-03-28T20:35:10.217981Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<h3 style=\"text-align: center\">Regular table</h3>\n",
       "                   <p style=\"text-align: center\">\n",
       "                       <b>Title:</b> No title detected<br>\n",
       "                       <b>Bounding box:</b> x1=63, y1=12, x2=562, y2=315\n",
       "                   </p>\n",
       "                   <div align=\"center\"><table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Col1</td>\n",
       "      <td>Col 2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Row 1</td>\n",
       "      <td>Value 1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Implicit row 1\\nImplicit row 2\\nImplicit row 3</td>\n",
       "      <td>Implicit value 1\\nImplicit value 2\\nImplicit value 3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Row 3</td>\n",
       "      <td>Value 3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table></div>\n",
       "                   <hr>\n",
       "                "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<h3 style=\"text-align: center\">Table with implicit rows</h3>\n",
       "                   <p style=\"text-align: center\">\n",
       "                       <b>Title:</b> No title detected<br>\n",
       "                       <b>Bounding box:</b> x1=63, y1=12, x2=562, y2=315\n",
       "                   </p>\n",
       "                   <div align=\"center\"><table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Col1</td>\n",
       "      <td>Col 2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Row 1</td>\n",
       "      <td>Value 1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Implicit row 1</td>\n",
       "      <td>Implicit value 1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Implicit row 2</td>\n",
       "      <td>Implicit value 2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Implicit row 3</td>\n",
       "      <td>Implicit value 3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Row 3</td>\n",
       "      <td>Value 3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table></div>\n",
       "                   <hr>\n",
       "                "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time: 16 ms (started: 2023-03-28 22:35:10 +02:00)\n"
     ]
    }
   ],
   "source": [
    "display_html(table.html_repr(title=\"Regular table\"), raw=True)\n",
    "display_html(table_implicit_rows.html_repr(title=\"Table with implicit rows\"), raw=True)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
